package Day_0203.MYSQL;

/**
 * @author zxc
 * @date 2023/02/03 22:40
 **/
public class SubDatabase_SubTable_ID {
    public static void main(String[] args) {
        /**
         * 分库分表后，id主键如何进行处理
         * ===》
         * 1.分库分表后，id主键问题 ：
         * 因为要是分成多个表之后，每个表都是从 1 开始累加，这样是不对的，我们需要一个 全局唯一id 来支持。
         *
         * 2.生成全局唯一 id 的方式：
         * （1）UUID：
         *  不适合作为主键，因为太长了，并且无序不可读，查询效率低。
         *  使用场景 ：比较适合用于生成唯一名字的标识，比如文件的名字。
         *
         * （2）数据库自增 id :
         *  两台数据库分别设置不同步长，生成不重复ID的策略来实现高可用。
         *  这种方式生成的 id 有序，但是需要独立部署数据库实例，成本高，还会有性能瓶颈。
         *
         * （3）利用 redis 生成 id :
         *  性能比较好，灵活方便，不依赖于数据库。
         *  但是，引入了新的组件造成系统更加复杂，可用性降低，编码更加复杂，增加了系统成本。
         *
         * （4）Twitter的snowflake算法 ：
         *  Github 地址：https://github.com/twitter-archive/snowflake。
         *
         * （5）美团的Leaf分布式ID生成系统 ：
         *  Leaf 是美团开源的分布式ID生成器，能保证全局唯一性、趋势递增、单调递增、信息安全，里面也提到了几种分布式方案的对比，
         *  但也需要依赖关系数据库、Zookeeper等中间件。感觉还不错。
         *  美团技术团队的一篇文章：https://tech.meituan.com/2017/04/21/mt-leaf.html 。
         *
         */
    }
}
